package ee.ttu.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * Created by Vahur Kaar on 11.03.2015.
 */
@Entity
@Table(name = "KASUTAJA", schema = "public")
public class Kasutaja implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "kasutaja_seq")
	@SequenceGenerator(name = "kasutaja_seq", sequenceName = "s_kasutaja", schema = "public")
	@Column(name = "ID")
	private Long id;

	@Column(name = "KONTO_NIMI")
	private String kontoNimi;

    @Column(name = "EESNIMI")
    private String eesnimi;

    @Column(name = "PERENIMI")
    private String perenimi;

    @Column(name = "EMAIL")
    private String email;

    @Column(name = "ORGANISATSIOONI_NIMI")
    private String organisatsiooniNimi;

    @Column(name = "SESSION_ID")
    private String sessionId;

	@OneToOne
	@JoinColumn(name = "KONTO_PAROOL", referencedColumnName = "ID")
	private Parool kontoParool;

	@ManyToOne
	@JoinColumn(name = "KONTO_STAATUS", referencedColumnName = "ID")
	private Klassifikaator kontoStaatus;

	@ManyToOne
	@JoinColumn(name = "KASUTAJA_TYYP", referencedColumnName = "ID")
	private Klassifikaator kasutajaTyyp;

	@JsonIgnore
    @OneToMany(mappedBy = "kasutaja")
    private List<KontoSyndmus> kontoSyndmusedList;

	@JsonIgnore
	@OneToMany(mappedBy = "failiOmanik")
	private List<Fail> kontoFailidList;

	@JsonIgnore
	@OneToMany(mappedBy = "autor")
	private List<Suhtlus> algatatudSuhtlused;

	@JsonIgnore
    @OneToMany(mappedBy = "adressaat")
    private List<Suhtlus> suunatudSuhtlused;

	@JsonIgnore
	@OneToMany(mappedBy = "seotudKasutaja")
	private List<RollEttepanekus> kontoEttepanekud;

	@JsonIgnore
    @OneToMany(mappedBy = "seotudKasutaja")
    private List<KasutajaPakkumises> kontoPakkumised;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getKontoNimi() {
        return kontoNimi;
    }

    public void setKontoNimi(String kontoNimi) {
        this.kontoNimi = kontoNimi;
    }

    public String getEesnimi() {
        return eesnimi;
    }

    public void setEesnimi(String eesnimi) {
        this.eesnimi = eesnimi;
    }

    public String getPerenimi() {
        return perenimi;
    }

    public void setPerenimi(String perenimi) {
        this.perenimi = perenimi;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getOrganisatsiooniNimi() {
        return organisatsiooniNimi;
    }

    public void setOrganisatsiooniNimi(String organisatsiooniNimi) {
        this.organisatsiooniNimi = organisatsiooniNimi;
    }

    public String getSessionId() {
        return sessionId;
    }

    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }

    public Parool getKontoParool() {
        return kontoParool;
    }

    public void setKontoParool(Parool kontoParool) {
        this.kontoParool = kontoParool;
    }

    public Klassifikaator getKontoStaatus() {
        return kontoStaatus;
    }

    public void setKontoStaatus(Klassifikaator kontoStaatus) {
        this.kontoStaatus = kontoStaatus;
    }

    public Klassifikaator getKasutajaTyyp() {
        return kasutajaTyyp;
    }

    public void setKasutajaTyyp(Klassifikaator kasutajaTyyp) {
        this.kasutajaTyyp = kasutajaTyyp;
    }

    public List<KontoSyndmus> getKontoSyndmusedList() {
        return kontoSyndmusedList;
    }

    public void setKontoSyndmusedList(List<KontoSyndmus> kontoSyndmusedList) {
        this.kontoSyndmusedList = kontoSyndmusedList;
    }

    public List<Fail> getKontoFailidList() {
        return kontoFailidList;
    }

    public void setKontoFailidList(List<Fail> kontoFailidList) {
        this.kontoFailidList = kontoFailidList;
    }

    public List<Suhtlus> getAlgatatudSuhtlused() {
        return algatatudSuhtlused;
    }

    public void setAlgatatudSuhtlused(List<Suhtlus> algatatudSuhtlused) {
        this.algatatudSuhtlused = algatatudSuhtlused;
    }

    public List<Suhtlus> getSuunatudSuhtlused() {
        return suunatudSuhtlused;
    }

    public void setSuunatudSuhtlused(List<Suhtlus> suunatudSuhtlused) {
        this.suunatudSuhtlused = suunatudSuhtlused;
    }

    public List<RollEttepanekus> getKontoEttepanekud() {
        return kontoEttepanekud;
    }

    public void setKontoEttepanekud(List<RollEttepanekus> kontoEttepanekud) {
        this.kontoEttepanekud = kontoEttepanekud;
    }

    public List<KasutajaPakkumises> getKontoPakkumised() {
        return kontoPakkumised;
    }

    public void setKontoPakkumised(List<KasutajaPakkumises> kontoPakkumised) {
        this.kontoPakkumised = kontoPakkumised;
    }
}
